Page({
  data: {
    userInfo: {},
    introLength: 0
  },
  
  onLoad: function(options) {
    wx.setNavigationBarTitle({
      title: '编辑资料'
    });
    
    // 接收传递过来的用户信息
    const eventChannel = this.getOpenerEventChannel();
    eventChannel.on('userData', (data) => {
      this.setData({
        userInfo: data,
        introLength: data.introduction ? data.introduction.length : 0
      });
    });
    
    // 如果没有传递数据，则获取用户信息
    if (!this.data.userInfo || !this.data.userInfo.nickName) {
      this.getUserInfo();
    }
    
    // 获取用户档案信息
    this.getUserProfile();
  },
  
  // 页面显示时，从本地存储更新数据
  onShow: function() {
    console.log('编辑资料页面 onShow 被调用');
    // 检查本地存储是否有用户信息
    try {
      const userInfo = wx.getStorageSync('userInfo');
      // 如果有本地存储的用户信息
      if (userInfo) {
        console.log('从本地存储获取到最新的用户信息', userInfo);
        // 合并现有数据，避免完全覆盖
        const updatedInfo = {
          ...this.data.userInfo,
          ...userInfo
        };
        
        // 更新数据
        this.setData({
          userInfo: updatedInfo,
          introLength: updatedInfo.introduction ? updatedInfo.introduction.length : 0
        });
        
        console.log('页面数据已更新', this.data.userInfo);
      }
    } catch (e) {
      console.error('从本地存储获取用户信息失败', e);
    }
  },
  
  getUserInfo: function() {
    // 尝试获取真实用户头像
    const that = this;
    wx.getUserInfo({
      success: function(res) {
        const userInfo = res.userInfo;
        // 获取本地存储的用户信息
        try {
          const storageUserInfo = wx.getStorageSync('userInfo') || {};
          
          // 优先使用API中的头像
          storageUserInfo.avatarUrl = userInfo.avatarUrl || storageUserInfo.avatarUrl;
          
          // 如果还是没有头像，使用默认头像
          if (!storageUserInfo.avatarUrl) {
            storageUserInfo.avatarUrl = 'https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/profile/default-avatar.jpg';
          }
          
          // 如果本地没有数据，使用默认值
          const defaultUserInfo = {
            nickName: storageUserInfo.nickName || userInfo.nickName || 'NAME',
            gender: storageUserInfo.gender || userInfo.gender || 0,
            school: storageUserInfo.school || '绵阳师范学院',
            email: storageUserInfo.email || '',
            phone: storageUserInfo.phone || '',
            introduction: storageUserInfo.introduction || '热爱编程和技术探索，擅长前端开发和小程序应用',
            tags: storageUserInfo.tags || ['二次元', '编程', '动漫', '前端', 'JavaScript'],
            avatarFrame: storageUserInfo.avatarFrame || null,
            title: storageUserInfo.title || null
          };
          
          // 合并数据
          const mergedUserInfo = {...defaultUserInfo, avatarUrl: storageUserInfo.avatarUrl};
          
          that.setData({
            userInfo: mergedUserInfo,
            introLength: mergedUserInfo.introduction ? mergedUserInfo.introduction.length : 0
          });
        } catch (e) {
          console.error('获取用户信息失败', e);
        }
      },
      fail: function() {
        // 获取API头像失败时，尝试从本地存储获取
        try {
          const userInfo = wx.getStorageSync('userInfo') || {
            avatarUrl: 'https://objectstorageapi.bja.sealos.run/a0qepsyj-001/text/profile/default-avatar.jpg',
            nickName: 'NAME',
            gender: 0,
            school: '绵阳师范学院',
            email: '',
            phone: '',
            introduction: '热爱编程和技术探索，擅长前端开发和小程序应用',
            tags: ['二次元', '编程', '动漫', '前端', 'JavaScript'],
            avatarFrame: null,
            title: null
          };
          
          that.setData({
            userInfo,
            introLength: userInfo.introduction ? userInfo.introduction.length : 0
          });
        } catch (e) {
          console.error('获取用户信息失败', e);
        }
      }
    });
  },
  
  // 获取用户档案信息
  getUserProfile: function() {
    const app = getApp();
    const tokenManager = require('../../utils/tokenManager');
    
    if (!tokenManager.isLoggedIn()) {
      console.log('用户未登录，无法获取档案信息');
      return;
    }
    
    const token = tokenManager.getAccessToken();
    
    // 显示加载状态
    wx.showLoading({
      title: '加载中...',
      mask: true
    });
    
    // 调用获取用户基本资料接口
    app.api.user.getProfile(token)
      .then(profile => {
        wx.hideLoading();
        console.log('获取到的用户基本资料:', profile);
        
        if (profile) {
          // 更新性别信息
          const genderMap = {
            'M': '男',
            'F': '女',
            'O': '其他'
          };
          
          const genderValue = profile.gender ? genderMap[profile.gender] : '未设置';
          console.log('转换性别:', profile.gender, '->', genderValue);
          
          this.setData({
            'userInfo.gender': genderValue
          }, () => {
            console.log('设置后的性别值:', this.data.userInfo.gender);
          });
        }
      })
      .catch(error => {
        wx.hideLoading();
        console.error('获取用户基本资料失败:', error);
      });
  },
  
  // 保存资料
  saveProfile: function() {
    const app = getApp();
    const tokenManager = require('../../utils/tokenManager');
    
    // 邮箱格式验证
    if (this.data.userInfo.email && !this.validateEmail(this.data.userInfo.email)) {
      wx.showToast({
        title: '邮箱格式不正确',
        icon: 'none'
      });
      return;
    }
    
    // 电话格式验证
    if (this.data.userInfo.phone && !this.validatePhone(this.data.userInfo.phone)) {
      wx.showToast({
        title: '电话格式不正确',
        icon: 'none'
      });
      return;
    }
    
    // 性别验证
    if (!this.data.userInfo.gender) {
      wx.showToast({
        title: '请选择性别',
        icon: 'none'
      });
      return;
    }

    // 显示加载状态
    wx.showLoading({
      title: '保存中...',
      mask: true
    });
    
    try {
      // 检查是否登录
      if (!tokenManager.isLoggedIn()) {
        wx.hideLoading();
        wx.showToast({
          title: '未登录，无法保存',
          icon: 'none'
        });
        return;
      }
      
      // 获取token
      const token = tokenManager.getAccessToken();
      
      // 性别格式化：转为API需要的格式 M/F/O
      let genderValue = this.data.userInfo.gender;
      if (genderValue === '男') {
        genderValue = 'M';
      } else if (genderValue === '女') {
        genderValue = 'F';
      } else if (genderValue === '其他') {
        genderValue = 'O';
      }
      
      // 准备API需要的数据格式
      const apiData = {
        nickname: this.data.userInfo.nickName,
        gender: genderValue,
        email: this.data.userInfo.email,
        phone: this.data.userInfo.phone,
        introduction: this.data.userInfo.introduction
      };
      
      console.log('提交的数据:', apiData);
      
      // 调用API更新用户资料
      app.api.user.updateProfile(token, apiData)
        .then(result => {
          // 隐藏加载提示
          wx.hideLoading();
          
          // 保存到本地存储
          wx.setStorageSync('userInfo', this.data.userInfo);
          
          // 显示成功提示
          wx.showToast({
            title: '保存成功',
            icon: 'success',
            duration: 2000
          });
          
          // 通知个人页面刷新数据
          const eventChannel = this.getOpenerEventChannel();
          if (eventChannel && eventChannel.emit) {
            eventChannel.emit('profileUpdated');
          }
          
          // 延迟返回，让用户看到提示
          setTimeout(() => {
            wx.navigateBack();
          }, 1500);
        })
        .catch(error => {
          wx.hideLoading();
          console.error('更新用户资料失败', error);
          
          // 显示错误信息
          wx.showToast({
            title: error.message || '保存失败',
            icon: 'none',
            duration: 2000
          });
        });
    } catch (e) {
      wx.hideLoading();
      console.error('保存用户信息失败', e);
      
      wx.showToast({
        title: '保存失败',
        icon: 'none'
      });
    }
  },
  
  // 验证邮箱格式
  validateEmail: function(email) {
    const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
    return regex.test(email);
  },
  
  // 验证电话格式
  validatePhone: function(phone) {
    const regex = /^1[3-9]\d{9}$/;
    return regex.test(phone);
  },
  
  // 跳转到头像编辑页面
  navigateToAvatarEdit: function() {
    wx.navigateTo({
      url: '/pages/avatar-edit/avatar-edit'
    });
  },
  
  // 跳转到昵称编辑页面
  navigateToNicknameEdit: function() {
    wx.navigateTo({
      url: '/pages/nickname-edit/nickname-edit'
    });
  },
  
  // 选择性别
  chooseGender: function() {
    console.log('当前性别值:', this.data.userInfo.gender);
    
    wx.showActionSheet({
      itemList: ['男', '女', '其他'],
      success: (res) => {
        if (!res.cancel) {
          console.log('用户选择了性别，索引:', res.tapIndex);
          
          // 获取选中的性别文本
          const genderTexts = ['男', '女', '其他'];
          const selectedText = genderTexts[res.tapIndex];
          
          // 映射到API需要的格式：'M'-男, 'F'-女, 'O'-其他
          const genderMap = {
            '男': 'M',
            '女': 'F',
            '其他': 'O'
          };
          
          const selectedGender = genderMap[selectedText];
          console.log('映射后的性别值:', selectedGender);
          
          // 更新本地状态 - 确保视图立即更新
          this.setData({
            'userInfo.gender': selectedText
          }, () => {
            console.log('更新后的性别值:', this.data.userInfo.gender);
          });
          
          // 调用更新用户基本资料接口
          this.updateProfile({ gender: selectedGender });
        }
      }
    });
  },
  
  // 更新用户基本资料
  updateProfile: function(profileData) {
    const app = getApp();
    const tokenManager = require('../../utils/tokenManager');
    
    if (!tokenManager.isLoggedIn()) {
      wx.showToast({
        title: '未登录，无法更新',
        icon: 'none'
      });
      return;
    }
    
    const token = tokenManager.getAccessToken();
    
    // 显示加载状态
    wx.showLoading({
      title: '更新中...',
      mask: true
    });
    
    // 调用更新用户基本资料接口
    app.api.user.updateProfile(token, profileData)
      .then(result => {
        wx.hideLoading();
        console.log('更新用户基本资料成功:', result);
        
        // 显示成功提示
        wx.showToast({
          title: '更新成功',
          icon: 'success',
          duration: 2000
        });
        
        // 通知个人页面刷新数据
        const eventChannel = this.getOpenerEventChannel();
        if (eventChannel && eventChannel.emit) {
          eventChannel.emit('profileUpdated');
        }
      })
      .catch(error => {
        wx.hideLoading();
        console.error('更新用户基本资料失败:', error);
        
        // 显示错误信息
        wx.showToast({
          title: error.message || '更新失败',
          icon: 'none',
          duration: 2000
        });
      });
  },
  
  // 输入邮箱
  onEmailInput: function(e) {
    this.setData({
      'userInfo.email': e.detail.value
    });
  },
  
  // 输入电话
  onPhoneInput: function(e) {
    this.setData({
      'userInfo.phone': e.detail.value
    });
  },
  
  // 选择学校(身份)
  chooseSchool: function() {
    // 实际应提供学校选择或自定义输入
    // 这里简化为弹窗输入
    wx.showModal({
      title: '修改身份信息',
      editable: true,
      placeholderText: '请输入身份信息',
      content: this.data.userInfo.school || '',
      success: (res) => {
        if (res.confirm && res.content) {
          this.setData({
            'userInfo.school': res.content
          });
        }
      }
    });
  },
  
  // 编辑标签
  editTags: function() {
    // 实际应提供标签选择和添加页面
    // 这里简化为弹窗提示
    const tagsStr = this.data.userInfo.tags.join('、');
    
    wx.showModal({
      title: '编辑标签',
      content: '当前标签: ' + tagsStr + '\n\n实际项目中应跳转到标签编辑页面',
      showCancel: true,
      confirmText: '确定',
      cancelText: '添加标签',
      success: (res) => {
        if (res.cancel) {
          // 模拟添加标签
          wx.showModal({
            title: '添加标签',
            editable: true,
            placeholderText: '请输入标签内容',
            success: (addRes) => {
              if (addRes.confirm && addRes.content) {
                const newTags = [...this.data.userInfo.tags];
                // 避免添加重复标签
                if (!newTags.includes(addRes.content)) {
                  newTags.push(addRes.content);
                  this.setData({
                    'userInfo.tags': newTags
                  });
                  
                  wx.showToast({
                    title: '标签已添加',
                    icon: 'success'
                  });
                } else {
                  wx.showToast({
                    title: '标签已存在',
                    icon: 'error'
                  });
                }
              }
            }
          });
        }
      }
    });
  },
  
  // 输入简介
  onIntroInput: function(e) {
    const value = e.detail.value;
    this.setData({
      'userInfo.introduction': value,
      introLength: value.length
    });
  }
}); 